const express = require('express');
const jwt = require('jsonwebtoken');
const AdminUser = require('../models/AdminUser');
const { authenticateToken } = require('../middleware/auth');

const router = express.Router();

/**
 * 管理员登录
 * POST /api/auth/login
 */
router.post('/login', async (req, res) => {
  try {
    const { username, password } = req.body;

    // 验证输入
    if (!username || !password) {
      return res.error('用户名和密码不能为空', 400);
    }

    // 查找管理员
    const admin = await AdminUser.findByUsername(username);
    if (!admin) {
      return res.error('用户名或密码错误', 401);
    }

    // 检查账户状态
    if (!admin.is_active) {
      return res.error('账户已被禁用', 401);
    }

    // 验证密码
    const isValidPassword = await AdminUser.verifyPassword(password, admin.password_hash);
    if (!isValidPassword) {
      return res.error('用户名或密码错误', 401);
    }

    // 生成JWT token
    const token = jwt.sign(
      { 
        userId: admin.id,
        username: admin.username,
        roleId: admin.role_id
      },
      process.env.JWT_SECRET,
      { expiresIn: process.env.JWT_EXPIRES_IN || '7d' }
    );

    // 更新最后登录时间
    await AdminUser.updateLastLogin(admin.id);

    // 返回登录成功信息
    res.success({
      token,
      user: {
        id: admin.id,
        username: admin.username,
        fullName: admin.full_name,
        roleName: admin.role_name,
        permissions: admin.permissions || []
      }
    }, '登录成功');

  } catch (error) {
    console.error('登录失败:', error);
    res.error('登录失败', 500, error.message);
  }
});

/**
 * 获取当前用户信息
 * GET /api/auth/profile
 */
router.get('/profile', authenticateToken, async (req, res) => {
  try {
    const admin = await AdminUser.findById(req.user.id);
    if (!admin) {
      return res.error('用户不存在', 404);
    }

    res.success({
      id: admin.id,
      username: admin.username,
      fullName: admin.full_name,
      roleName: admin.role_name,
      permissions: admin.permissions || [],
      lastLoginAt: admin.last_login_at,
      createdAt: admin.created_at
    });

  } catch (error) {
    console.error('获取用户信息失败:', error);
    res.error('获取用户信息失败', 500, error.message);
  }
});

/**
 * 更新当前用户信息
 * PUT /api/auth/profile
 */
router.put('/profile', authenticateToken, async (req, res) => {
  try {
    const { full_name, old_password, new_password } = req.body;
    const updateData = {};

    // 更新姓名
    if (full_name !== undefined) {
      updateData.full_name = full_name;
    }

    // 更新密码
    if (new_password) {
      if (!old_password) {
        return res.error('请输入原密码', 400);
      }

      const admin = await AdminUser.findById(req.user.id);
      const isValidPassword = await AdminUser.verifyPassword(old_password, admin.password_hash);
      if (!isValidPassword) {
        return res.error('原密码错误', 400);
      }

      updateData.password = new_password;
    }

    if (Object.keys(updateData).length === 0) {
      return res.error('没有要更新的信息', 400);
    }

    const updatedAdmin = await AdminUser.update(req.user.id, updateData);

    res.success({
      id: updatedAdmin.id,
      username: updatedAdmin.username,
      fullName: updatedAdmin.full_name,
      roleName: updatedAdmin.role_name
    }, '更新成功');

  } catch (error) {
    console.error('更新用户信息失败:', error);
    res.error('更新用户信息失败', 500, error.message);
  }
});

/**
 * 退出登录
 * POST /api/auth/logout
 */
router.post('/logout', authenticateToken, async (req, res) => {
  try {
    // 这里可以实现token黑名单机制
    // 目前简单返回成功，客户端删除token即可
    res.success(null, '退出登录成功');
  } catch (error) {
    console.error('退出登录失败:', error);
    res.error('退出登录失败', 500, error.message);
  }
});

/**
 * 刷新token
 * POST /api/auth/refresh
 */
router.post('/refresh', authenticateToken, async (req, res) => {
  try {
    const admin = await AdminUser.findById(req.user.id);
    if (!admin || !admin.is_active) {
      return res.error('用户不存在或已被禁用', 401);
    }

    // 生成新的token
    const token = jwt.sign(
      { 
        userId: admin.id,
        username: admin.username,
        roleId: admin.role_id
      },
      process.env.JWT_SECRET,
      { expiresIn: process.env.JWT_EXPIRES_IN || '7d' }
    );

    res.success({ token }, 'Token刷新成功');

  } catch (error) {
    console.error('刷新token失败:', error);
    res.error('刷新token失败', 500, error.message);
  }
});

module.exports = router;
